package org.bees.cms.web.util.velocity.renderer;

import java.io.Serializable;

import net.sf.json.JSONObject;

import org.bees.cms.common.Enumerable;
import org.bees.cms.web.util.velocity.Configuration;

public class EnumerationRenderer extends AbstractMapRenderer {
	private Class<? extends Enum<? extends Enumerable>> enumeration;

	@Override
	public void initialize(JSONObject json) throws Exception {
		super.initialize(json);
		enumeration = json == null ? enumeration : json.containsKey("enumeration") ? Configuration.getEnumeration(json.getString("enumeration")) : enumeration;
	}

	@Override
	public String render(Serializable t) throws Exception {
		Enumerable[] enumerables = (Enumerable[]) enumeration.getMethod("values").invoke(null);
		for (Enumerable enumerable : enumerables) {
			map.put(enumerable.value(), enumerable.key());
		}
		return super.render(t);
	}

	@Override
	public void destroy() throws Exception {
		super.destroy();
		enumeration = null;
	}

	public Class<? extends Enum<? extends Enumerable>> getEnumeration() {
		return enumeration;
	}

	public void setEnumeration(Class<? extends Enum<? extends Enumerable>> enumeration) {
		this.enumeration = enumeration;
	}

}
